// 第一版
// 时间复杂度为 O(n ^ 2)

function getTenNum(testArray, n) {
    let result = [];
    for (let i = 0; i < n; ++i) {
        const random = Math.floor(Math.random() * testArray.length);
        const cur = testArray[random];
        if (result.includes(cur)) {
            i--;
            break;
        }
        result.push(cur);
    }
    return result;
}
// const testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
// const resArr = getTenNum(testArray, 10);


// 第二版
// 标记法 / 自定义属性法
// 时间复杂度为 O(n)

function getTenNum(testArray, n) {
    let hash = {};
    let result = [];
    let ranNum = n;
    while (ranNum > 0) {
        const ran = Math.floor(Math.random() * testArray.length);
        if (!hash[ran]) {
            hash[ran] = true;
            result.push(ran);
            ranNum--;
        }
    }
    return result;
}
const testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
const resArr = getTenNum(testArray, 10);



// 最终版
// 边遍历边删除
// 时间复杂度为 O(n)

function getTenNum(testArray, n) {
    const cloneArr = [...testArray];
    let result = [];
    for (let i = 0; i < n; ++i) {
        const random = Math.floor(Math.random() * cloneArr.length);
        const cur = cloneArr[random];
        result.push(cur);
        cloneArr.splice(random, 1);
    }
    return result;
}
// const testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
// const resArr = getTenNum(testArray, 14);

// 作者：Big shark@LX
// 链接：https://juejin.cn/post/7004638318843412493
// 来源：稀土掘金
// 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。